Ik probeer programmatisch een omgeving op te zetten met Jetty, OpenEJB en WebApps om Selenium-tests te ontwikkelen en uit te voeren. Iets soortgelijks wordt beschreven in dit artikel: http://tomee.apache.org/functional-testing-with-openejb,-jetty-and-selenium.html. Deze opzet is erg goed, omdat ik de seleniumtest kan starten door de IDE of Maven, en dezelfde code kan gebruiken om een server te starten voor ontwikkeling. Ik zag deze opstelling werken met een oude versie van Jetty (6.2) en met een onbekende EJB-container (genaamd MyContainer) in EJB 3.0. Nu doe ik (of probeer ik te doen ...) hetzelfde in een nieuwer project, dat zal draaien in Wildfly 10.1.0 en EJB-lookups doen door CDI (BeanManager). Maar ik heb wat problemen om CDI correct te laten werken in de nieuwere versies van Jetty en OpenEJB of TomEE. Ik kan op internet geen andere voorbeelden vinden van hetzelfde met nieuwere versies van de frameworks. Ik weet niet eens of ik Jetty echt nodig heb om dat te doen. Eerste poging: Jetty (zonder jetty-jndi) + OpenEJB + tomee.jpa.cdi = false Als ik de OpenEJB 4.7.4 en Jetty 9.4 gebruik, als ik de code CDI.current (). GetBeanManager () uitvoer, resulteert in: java.lang.IllegalStateException: kan geen toegang krijgen tot CDI persistence.xml:Obs .: Het bestand bonen.xml staat bij alle pogingen in de WEB-INF-directory van mijn webapp. Tweede poging: Jetty (zonder jetty-jndi) + TomEE + tomee.jpa.cdi = false Door TomEE 7.0.3 en Jetty 9.4 te gebruiken, kan ik CDI alleen OpenEJB voor TomEE laten veranderen in maven-afhankelijkheid (raar! Er wordt verondersteld dat OpenEJB CDI-ondersteuning heeft). Deze CDI werkt wanneer ik debuggen in het midden van de serverconfiguratie, maar wanneer het programma de webapp raakt, treedt er een fout op wanneer ik een EJB-zoekopdracht probeer uit te voeren: "Op een thread zonder een geïnitialiseerde context, noch een klassenlader die een geïmplementeerde app toewijst" Derde poging: Jetty (met jetty-jndi) + TomEE of OpenEJB + tomee.jpa.cdi = false EJB Container start maar Jetty-server kan niet starten omdat java: comp / env / niet is gevonden. javax.naming.NameNotFoundException: Naam "comp / env" niet gevonden Code toegevoegd: Configuration.ClassList classlist = Configuration.ClassList.setServerDefault (server); classlist.addAfter ("org.eclipse.jetty.webapp.FragmentConfiguration", "org.eclipse.jetty.plus.webapp.EnvConfiguration", "org.eclipse.jetty.plus.webapp.PlusConfiguration"); Vierde poging: Jetty (zonder jetty-jndi) + TomEE + tomee.jpa.factory.lazy = true Wijzig de eigenschap in persistence.xml: De EJB-container is gestart en CDI.current () bestaat, maar als ik daarna enkele SQL's probeer uit te voeren met de code: @PersistenceContext (unitName = "my-pu") privé EntityManager em; //methode Session session = em.unwrap (Session.class); session.doWork (new Work () { @Override public void execute (Connection connection) gooit SQLException { try (Statement statement = connection.createStatement ()) { statement.executeUpdate (sql); connection.commit (); Het systeem stopt veel tijd in Session session = em.unwrap (Session.class) ;. Daarna verschijnen er veel fouten (Kan Hibernate SessionFactory niet bouwen, Kon constructor voor org.hibernate.persister.entity.SingleTableEntityPersister niet krijgen) en aan het einde van de stacktrace: Veroorzaakt door: javax.ejb.ConcurrentAccessTimeoutException: geen instances beschikbaar in Stateless Session Bean-pool. Wachtte 30 SECONDEN Vraag Kan het dus een probleem met het klassenpad zijn? Ik had al wat problemen met TomEE CDI die waren opgelost nadat ik een aantal afhankelijkheden uit de oude EJB-container had verwijderd. Ik heb over CDI-problemen al gelezen dat de oorzaak verkeerde import was in verband met cdi-api-afhankelijkheid. Als iemand een heel ander (en eenvoudiger) idee heeft dan het mijne om dit soort omgeving te laten werken, is het ook welkom. Enkele relevante delen van de code Maven-afhankelijkheid JavaEE API: Maven-afhankelijkheid CDI API: javax javaee-api 7.0 verstrekt javax.enterprise cdi-api 1.2 verstrekt Maven-afhankelijkheid OpenEJB 4.7.4:Maven-afhankelijkheid TomEE 7.0.3: org.apache.openejb openejb-core 4.7.4 Maven afhankelijkheidSteiger: org.apache.tomee openejb-core 7.0.3 org.eclipse.jetty steiger-server 9.4.6.v20170531 org.eclipse.jetty steiger-webapp 9.4.6.v20170531 org.eclipse.jetty steiger-plus 9.4.6.v20170531 persistence.xml -> org.eclipse.jetty jetty-jndi 9.4.6.v20170531 ServiceLocator-opzoekcode (ServiceLocator.lookup (CrudService.class)): @Override Public Object lookup (Class > type, Annotation ... annotations) gooit NamingException { BeanManager-manager = CDI.current (). GetBeanManager (); Iterator > bonen = manager.getBeans (type, annotaties) .iterator (); if (! beans.hasNext ()) { throw new NamingException ("CDI BeanManager kan geen instantie van het aangevraagde type vinden" + type.getName ()); Bean > Bean = beans.next (); CreationalContext > Ctx = manager.createCreationalContext (bean); return manager.getReference (bean, type, ctx); EJBContainer maken: EJBContainer.createEJBContainer (rekwisieten) .getContext (); // niets bijzonders in de rekwisieten
2021-02-24 08:17:47
Gebruik misschien org.apache.tomee alleen javaee api en geen javax spec jars eerst. Dan kun je een klasse nodig hebben die de jndi-systeemeigenschap dwingt - helaas tijdens runtime - om eerst het openejb-pakket in te stellen, aangezien het jetty jndi-installatieprogramma de bestaande setup doorbreekt, ervan uitgaande dat het alleen is. Deel misschien ook uw logboeken of project, het kan helpen om te weten wat er gebeurt. Uw antwoord StackExchange.ifUsing ("editor", function () { StackExchange.using ("externalEditor", function () { StackExchange.using ("snippets", function () { StackExchange.snippets.init (); }, "code-snippets"); StackExchange.ready (function () { var channelOptions = { tags: "" .split (""), id: "1" initTagRenderer ("". split (""), "" .split (""), channelOptions); StackExchange.using ("externalEditor", function () { // Moet de editor na fragmenten activeren, als fragmenten zijn ingeschakeld if (StackExchange.settings.snippets.snippetsEnabled) { StackExchange.using ("snippets", function () { createEditor (); anders { createEditor (); functie createEditor () { StackExchange.prepareEditor ({ useStacksEditor: false, heartbeatType: 'antwoord', autoActivateHeartbeat: false, convertImagesToLinks: waar, noModals: waar, showLowRepImageUploadWarning: true, ReputationToPostImages: 10, bindNavPrevention: true, postfix: "", imageUploader: { brandingHtml: "Aangedreven door \ u003ca href = \" https: //imgur.com/ \ "\ u003e \ u003csvg class = \" svg-icon \ "width = \" 50 \ "hoogte = \" 18 \ "viewBox = \ "0 0 50 18 \" fill = \ "none \" xmlns = \ "http: //www.w3.org/2000/svg \" \ u003e \ u003cpath d = \ "M46.1709 9.17788C46.1709 8.26454 46.2665 7.94324 47.1084 7.58816C47.4091 7.46349 47.7169 7.36433 48.0099 7.26993C48.9099 6.97997 49.672 6.73443 49.672 5.93063C49.672 5.22043 48.9832 4.61182 48.1414 4.61182C47.4335 4.61182 46.7256 4.91628 46.0944 43.1481 6.59048V11.9512C43.1481 13.2535 43.6264 13.8962 44.6595 13.8962C45.6924 13.8962 46.1709 13.2535 46.1709 11.9512V9.17788Z \ "/ \ u003e \ u003cpath d = \" M32.492 10.1419C32.492 14.045.14.07 37.492 14.045.14.07 37.045 14.6954 41.5985 12.6954 41.5985 10.1419V6.59049C41.5985 5.28821 41.1394 4.66232 40.1061 4.66232C39.0732 4.66232 38.5948 5.28821 38.5948 6.59049V9.60062C38.5948 10.8521 38.2696 11.520455 37.0451 11.5954.545.85.8 521 35.4954 9.60062V6.59049C35.4954 5.28821 35.0173 4.66232 34.0034 4.66232C32.9703 4.66232 32.492 5.28821 32.492 6.59049V10.1419Z \ "/ \ u003e \ u003cpath fill-rule = \" evenodd \ "clip-rule = \" evenodd \ "d = \ "M25.6622 17.6335C27.8049 17.6335 29.3739 16.9402 30.2537 15.6379C30.8468 14.7755 30.9615 13.5579 30.9615 11.9512V6.59049C30.9615 5.28821 30.4833 4.66231 29.4502 4.66231C28.9913 4.63.7 ... .1369 4.56087 21.0134 6.57349 21.0134 9.27932C21.0134 11.9852 23.003 13.913 25.3754 13.913C26.5612 13.913 27.4607 13.4902 28.1109 12.6616C28.1109 12.7229 28.1161 12.7799 28.121 12.8346C28 ... 15.2321 24.1352 14.9821 23.5661 14.7787C23.176 14.6393 22.8472 14.5218 22.5437 14.5218C21.7977 14.5218 21.2429 15.0123 21.2429 15.6887C21.2429 16.7375 22.9072 17.6335 25.6622 17.6335Z79C24.13 26.6335Z79C24.13 27.2119 7.09766 28.0918 7.94324 28.0918 9.27932C28.0918 10.6321 27.2311 11.5116 26.1024 11.5116C24.9737 11.5116 24.1317 10.6491 24.1317 9.27932Z \ "/ \ u003e \ u003cpath d = \" M16.8045 11.862.862.806 13.862.862.862 13.862.862.862 13.862.862.862 13.862.862.862.137.862.862.862.862.862.862.862.862.860 19.8079 13.2535 19.8079 11.9512V8.12928C19.8079 5.82936 18.4879 4.62866 16.4027 4.62866C15.1594 4.62866 14.279 4.98375 13.3609 5.88013C12.653 5.05154 11.6581 4.62866 10.3573 4.62866C9.34336 4.62866 8.57809 4.89931 4.62866 5.00066 5.28821 5.00066 6.59049V11.9512C5.00066 13.2535 5.47873 13.8962 6.51203 13.8962C7.54479 13.8962 8.0232 13.2535 8.0232 11.9512V8.90741C8.0232 7.58817 8.44431 6.91179 9.53458 6.91179C10.5104 6.94118 ... C13.4375 13.8962 13.9157 13.2535 13.9157 11.9512V8.90741C13.9157 7.58817 14.3365 6.91179 15.4269 6.91179C16.4027 6.91179 16.8045 7.58817 16.8045 8.94108V11.9512Z \ "/ \ u003e \ U003cpath d = \ "M3.31675 6.59049C3.31675 5.28821 2.83866 4.66232 1.82471 4.66232C0.791758 4.66232 0.313354 5.28821 0.313354 6.59049V11.9512C0.313354 13.2535 0.791758 13.8962 1.82471 13.8962C2.85798 13.8962C2.85798 13.8962C2.85798 ... U003e \ u003cpath d = \ "M1.87209 0.400291C0.843612 0.400291 0 1.1159 0 1.98861C0 2.87869 0.822846 3.57676 1.87209 3.57676C2.90056 3.57676 3.7234 2.87869 3.7234 1.98861C3.7234 1.1159 2.90087 \" 0 0.4291 0.90087 " \ "/ \ u003e \ u003c / svg \ u003e \ u003c / a \ u003e", contentPolicyHtml: "Gebruikersbijdragen gelicentieerd onder \ u003ca href = \" https: //stackoverflow.com/help/licensing \ "\ u003eccby-sa \ u003c / a \ u003e \ u003ca href = \ "https: //stackoverflow.com/legal/content-policy \" \ u003e (inhoudsbeleid) \ u003c / a \ u003e ", allowUrls: waar onDemand: waar, discardSelector: ".discard-answer" , onmiddellijkShowMarkdownHelp: true, enableTables: true, enableSnippets: true Bedankt voor het bijdragen aan een antwoord op Stack Overflow! Zorg ervoor dat u de vraag beantwoordt. Geef details en deel uw onderzoek! Maar vermijd ... Om hulp vragen, opheldering vragen of reageren op andere antwoorden. Uitspraken doen op basis van meningen; ondersteun ze met referenties of persoonlijke ervaring. Bekijk onze tips voor het schrijven van goede antwoorden voor meer informatie. Concept opgeslagen Concept verwijderd Meld u aan of log in StackExchange.ready (function () { StackExchange.helpers.onClickDraftSave ('# login-link'); Meld u aan met Google Meld u aan met Facebook Meld u aan met e-mail en wachtwoord Verzenden Post als gast Naam E-mail Vereist, maar nooit getoond StackExchange.ready ( functie () { StackExchange.openid.initPostLogin ('. New-post-login', 'https% 3a% 2f% 2fstackoverflow.com% 2fquestions% 2f45538143% 2fproblems-with-cdi-in-setup-for-functional-testing-with-tomee- or-openejb-steiger% 23new-answer ',' question_page '); Post als gast Naam E-mail Vereist, maar nooit getoond Plaats uw antwoord Gooi weg Door op "Plaats uw antwoord" te klikken, gaat u akkoord met onze servicevoorwaarden, privacybeleid en cookiebeleid Niet het antwoord waar je naar zoekt? Blader door andere vragen met de tag ejb jetty cdi apache-tomee openejb of stel uw eigen vraag.